﻿namespace TaskDemo
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
            Test1();
            Test2();
            Test3();
            Console.ReadLine();
        }

        //【1】创建Task对象，然后调用Start方法启动线程
        /// <summary>
        /// 适合用在创建线程但是不需要马上启用，在需要时启动。
        /// </summary>
        static void Test1()
        {
            Task task = new Task(() =>
            {
                //在这个地方编写需要的具体任务....


                Console.WriteLine("new 一个新的Task，对应的子线程ID=" + Thread.CurrentThread.ManagedThreadId);
            });
            task.Start();
        }
        //【2】使用Task的静态方法Run方法直接启动线程
        /// <summary>
        /// 适合使用在定义后马上启动。
        /// </summary>
        static void Test2()
        { 
            Task task = Task.Run(() =>
            {
                //在这个地方编写需要的具体任务....


                Console.WriteLine("使用Task中的Run方法，对应的子线程ID=" + Thread.CurrentThread.ManagedThreadId);
            });
        }
        //【3】使用Factory启动
        /// <summary>
        /// 使用线程池
        /// </summary>
        static void Test3()
        {
            Task task = Task.Factory.StartNew(() =>
            {
                //在这个地方编写需要的具体任务....


                Console.WriteLine("使用Task中的Factory.StartNew方法，对应的子线程ID=" + Thread.CurrentThread.ManagedThreadId);
            });
        }
    }
}
